import java.awt.Color;

import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JTextArea;

/**
 * @author Francisco Vallejo
 * 
 */
public class MyListenerCambios implements ItemListener, MouseListener  {
	private Metodo metod = new Metodo();
	private VentanaPrincipal ventana;

	public MyListenerCambios(VentanaPrincipal ventana) {
		this.ventana = ventana;
	}

	/**
	 * Metodo para mostrar un alumno en la pantalla inferior
	 * 
	 * @param textAreaInferior
	 *            pantalla donde se escribiran los datos del alumno
	 * @param alumno
	 *            alumno el cual se mostrara por pantalla
	 */
	public void mostrarAlumno(JLabel label, DefaultListModel modeloLista,
			Alumno alumno) {
		if (alumno != null) {
			modeloLista.clear();
			modeloLista.addElement(alumno);
		}
		// textAreaInferior.setText(alumno.getDni() + "      "
		// + alumno.getNombre() + "      " + alumno.getPoblacion()
		// + "      " + alumno.getTelefono() + "      "
		// + alumno.getFechaAux() + "      " + alumno.getCarrera());
		// }
		else {
			label.setForeground(Color.red);
			label.setText("El alumno No Existe :D ");
		}
	}

	/**
	 * Metodo para mostrar los alumnos de la misma carrera en la pantalla
	 * inferior
	 * 
	 * @param textAreaInferior
	 *            pantalla donde se escribiran los datos de los alumno
	 * @param alumno
	 *            alumno el cual se mostrara por pantalla
	 */
	public void mostrarAlumnosPorCarrera(DefaultListModel modeloLista,
			Alumno alumno) {
		if (alumno != null) {
			modeloLista.addElement(alumno);

			// textAreaInferior.setText(textAreaInferior.getText()
			// + alumno.getDni() + "      " + alumno.getNombre()
			// + "      " + alumno.getPoblacion() + "      "
			// + alumno.getTelefono() + "      " + alumno.getFechaAux()
			// + "      " + alumno.getCarrera()+"\n");
		} else {
			// textAreaInferior.setText("El alumno No Existe :D ");
		}
	}

	// ITEM LISTENER
	@Override
	public void itemStateChanged(ItemEvent arg0) {
		if (arg0.getStateChange() == ItemEvent.SELECTED) {
			String carrera = (String) arg0.getItem();

			ventana.getModeloLista().clear();
			ArrayList<Alumno> alumnosPorCarrera = new ArrayList<Alumno>();
			alumnosPorCarrera = metod.mostrarAlumnosPorCarrera(carrera);

			if (alumnosPorCarrera.size() == 0) {
				ventana.getTexto7().setForeground(null);
				ventana.getTexto7().setText("No hay alumnos en esa carrera");
			} else {
				for (int i = 0; i < alumnosPorCarrera.size(); i++) {
					ventana.getTexto7().setText("");
					Alumno auxAlumno = alumnosPorCarrera.get(i);
					mostrarAlumnosPorCarrera(ventana.getModeloLista(),
							auxAlumno);
				}
			}
		}
	}

	// MOUSE LISTENER
	@Override
	public void mouseClicked(MouseEvent e) {
		if (e.getSource() == ventana.getCabeceraInferior()) {
			ventana.getTexto7().setForeground(null);
			ventana.getTexto7().setText("CONSULTAS DE CARRERA");
		} else if (e.getSource() == ventana.getListaAlumnos()) {
			if (ventana.getListaAlumnos().getSelectedIndex() != -1) {
				Alumno auxiliar = (Alumno) ventana.getModeloLista()
						.getElementAt(
								ventana.getListaAlumnos().getSelectedIndex());
				ventana.getTexto7().setForeground(null);
				ventana.getTexto7().setText(
						"Click en el alumno " + auxiliar.getNombre());
			}
		}
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		if (e.getSource() == ventana.getCabeceraInferior()) {
			ventana.getTexto7().setForeground(null);
			ventana.getTexto7().setText(" PASANDO POR CONSULTAS DE CARRERA");
		}

	}

	@Override
	public void mouseExited(MouseEvent e) {
		// ventana.getTexto7().setText("mouseExited");
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// ventana.getTexto7().setText("mousePressed");

	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// ventana.getTexto7().setText("mouseReleased");

	}

/**
 * Metodo para comprobar que el dni sea correcto
 * @return devuelve true si la letra coincide con los numeros, false en cualquier caso contrario
 */
public boolean comprobarDni() {
	
			
			String dni = ventana.getTexto1().getText();
			
			if (dni.length() == 9) {
				char letra = (char) dni.charAt(8);
				int numeros = Integer.parseInt((dni.substring(0, 8)));
				int resultado = numeros % 23;
				char result = ' ';
				char result2 = ' ';
				switch (resultado) {
				case 0:
					result = 'T';
					result2 = 't';
					break;
				case 1:
					result = 'R';
					result2 = 'r';
					break;
				case 2:
					result = 'W';
					result2 = 'w';
					break;
				case 3:
					result = 'A';
					result2 = 'a';
					break;
				case 4:
					result = 'G';
					result2 = 'g';
					break;
				case 5:
					result = 'M';
					result2 = 'm';
					break;
				case 6:
					result = 'Y';
					result2 = 'y';
					break;
				case 7:
					result = 'F';
					result2 = 'f';
					break;
				case 8:
					result = 'P';
					result2 = 'p';
					break;
				case 9:
					result = 'D';
					result2 = 'd';
					break;
				case 10:
					result = 'X';
					result2 = 'x';
					break;
				case 11:
					result = 'B';
					result2 = 'b';
					break;
				case 12:
					result = 'N';
					result2 = 'n';
					break;
				case 13:
					result = 'J';
					result2 = 't';
					break;
				case 14:
					result = 'Z';
					result2 = 'z';
					break;
				case 15:
					result = 'S';
					result2 = 's';
					break;
				case 16:
					result = 'Q';
					result2 = 'q';
					break;
				case 17:
					result = 'V';
					result2 = 'v';
					break;
				case 18:
					result = 'H';
					result2 = 'h';
					break;
				case 19:
					result = 'L';
					result2 = 'l';
					break;
				case 20:
					result = 'C';
					result2 = 'c';
					break;
				case 21:
					result = 'K';
					result2 = 'k';
					break;
				case 22:
					result = 'E';
					result2 = 'e';
					break;
				default:
					ventana.getTexto1Aux().setForeground(Color.red);
					ventana.getTexto1Aux().setText("Mal formato Dni");
					return false;
				}
				if (letra == result || letra == result2) {
					ventana.getTexto1Aux().setText("");
					return true;
				}else{
					ventana.getTexto1Aux().setForeground(Color.red);
					ventana.getTexto1Aux().setText("Dni Incorrecto");
					return false;
				}
			} else {
				ventana.getTexto1Aux().setForeground(Color.red);
				ventana.getTexto1Aux().setText("Longitud Incorrecta");
				return false;
			}
		
}

}
